package br.com.gecandango.service.impl;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import br.com.gecandango.beans.Especialidade;
import br.com.gecandango.beans.Etapa;
import br.com.gecandango.service.EspecialidadeService;

public class EspecialidadeServiceImpl extends HibernateDaoSupport implements
	EspecialidadeService {
	/* (non-Javadoc)
	 * @see br.com.gecandango.service.impl.EspecialidadeService#save(br.com.gecandango.beans.Especialidade)
	 */
	public Especialidade save(Especialidade bean) {
		try {
			List<Especialidade> esp = getHibernateTemplate().find("from Especialidade where nome=?", bean.getNome());
			bean.setId(esp.get(0).getId());
		} catch (Exception e) {
			// TODO: handle exception
		}
		
		
		getHibernateTemplate().saveOrUpdate(bean);
		for (Etapa etapa : bean.getEtapas()) {
			etapa.setEspecialidade(bean);
			getHibernateTemplate().saveOrUpdate(etapa);
		}
		List<Especialidade> e = getHibernateTemplate().find("from Especialidade where nome=?", bean.getNome());
		List<Etapa> etapas = (List<Etapa>)getHibernateTemplate().find("from Etapa where id_especialidade=? order by item", e.get(0).getId());
		e.get(0).setEtapas(etapas);
		return e.get(0);
	}
	/* (non-Javadoc)
	 * @see br.com.gecandango.service.impl.EspecialidadeService#listEspecialidades()
	 */
	public List<Especialidade> list() {
		return getHibernateTemplate().find("from Especialidade");
	}
	public List<Especialidade> listByRamoConhecimento(String ramoConhecimento){
		return getHibernateTemplate().find("from Especialidade where ramoConhecimento=?", ramoConhecimento);
	}
	
	/* (non-Javadoc)
	 * @see br.com.gecandango.service.impl.EspecialidadeService#findEspecialidade(java.lang.Integer)
	 */
	public Especialidade find(Long id) {
		List<Especialidade> e = (List<Especialidade>)getHibernateTemplate().find("from Especialidade where id=?", id);
		
		List<Etapa> etapas = (List<Etapa>)getHibernateTemplate().find("from Etapa where id_especialidade=?", id);
		e.get(0).setEtapas(etapas);
		return e.get(0);
	}
	
	/* (non-Javadoc)
	 * @see br.com.gecandango.service.impl.EspecialidadeService#deleteEspecialidade(br.com.gecandango.beans.Especialidade)
	 */
	public void delete(Especialidade bean) {
		getHibernateTemplate().delete(bean);
	}
	public void saveEtapa(Etapa bean){
		getHibernateTemplate().saveOrUpdate(bean);
	}
	public Etapa findEtapa(Long id){
		List<Etapa> e = (List<Etapa>)getHibernateTemplate().find("from Etapa where id=?", id);
		return e.get(0);
	}
}
